// 除对象和NaN的多维去重
var array = [1, 2, 1, [1, 1, 2], [3, 3, 4]];

function unique(array) {
  var res = [];
  for (var i = 0, len = array.length; i < len; i++) {
    var current = array[i];

    if (Array.isArray(array[i])) {
      res.push(unique(array[i]));
    }
    else if (res.indexOf(current) === -1) {
      res.push(current);
    }

  }
  return res;
}

console.log(unique(array)); // [1, 2, [1, 2], [3, 4]]


// 全部数据类型的去重
// 如果是这样的数组
var array = [1, 2, 1, [1, 1, 2], [3, [3,4], [3,4]], [1, 1, 2]];
// 处理成[ 1, 2, [ 1, 2 ], [ 3, [ 3, 4 ] ] ]

function unique(array) {
  const res = [];
  const obj = {}
  // 去除相同的元素包括对象和数组
  const arr = array.filter(item => {
    return obj.hasOwnProperty(typeof item + JSON.stringify(item)) ? false : (obj[typeof item + JSON.stringify(item)] = true);
  })
  // 
  for (var i = 0, len = arr.length; i < len; i++) {
    var current = arr[i];
    // 如果是数组类型 则递归去重
    if (Array.isArray(arr[i])) {
      res.push(unique(arr[i]));
    }
    else {
      res.push(current);
    }
  }
  return res;
}

console.log(unique(array)); 